<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>配置与管理</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="internals2.pdo.prerequisites.html">前提条件</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="internals2.pdo.implementing.html">Fleshing out your skeleton</a></div>
 <div class="up"><a href="internals2.pdo.html">PDO 驱动</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="internals2.pdo.preparation" class="sect1">
 <h2 class="title">配置与管理</h2>
 <div class="sect2" id="internals2.pdo.preparation.layout">
  <h3 class="title">源目录布局</h3>

  <p class="para">
   一个典型的 PDO 驱动程序源目录布局如下所示，其中
   <em>SKEL</em> 表示该驱动程序要连接到的数据库的名称的缩写形式。
  </p>
  <div class="example-contents screen">
<div class="cdata"><pre>
pdo_SKEL/          
  config.m4                  # unix 构建脚本
  config.w32                 # win32 构建脚本
  CREDITS
  package.xml                # 有关包的元信息
  pdo_SKEL.c                 # 标准 PHP 扩展
  php_pdo_SKEL.h
  php_pdo_SKEL_int.h         # 驱动程序私有头文件
  SKEL_dbh.c                 # 包含 PDO 的驱动程序接口的实现
  SKEL_stmt.c                # 包含 PDO 声明接口的实现
  tests/
</pre></div>
  </div>
  <p class="para">稍后在本文档中阐述这些文件的内容。</p>
 </div>
 <div class="sect2" id="internals2.pdo.preparation.create-skel">
  <h3 class="title">创建一个基本框架</h3>

  <p class="para">
   最简单的方法就是使用 PHP 目录树中的 <var class="filename">ext</var> 目录下的 <strong class="command">ext_skel</strong>
    Shell 脚本。这将生成包含很多上面列出的文件的基本框架目录。通过执行下面命令来完成:
  </p>
  <div class="example-contents screen">
<div class="cdata"><pre>
./ext_skel --extname=pdo_SKEL
</pre></div>
  </div>
  <p class="para">
   这将生成一个名为pdo_SKEL包含基本框架文件的目录，目录名称可以自定义。该目录可以移动到PHP扩展目录之外。PDO 是 PECL 的一个扩展，不应该包括在标准扩展目录中。只要你有过PHP和PDO的安装，你就会想到从其它目录创建。
  </p>
 </div>
 <div class="sect2" id="internals2.pdo.preparation.std-includes">
  <h3 class="title">标准包含文件</h3>
  <div class="sect3" id="internals2.pdo.preparation.std-includes.build-specific">
   <h4 class="title">创建特定头文件</h4>
   <p class="para">
    头文件 congfig.h 是由配置进程根据系统平台及其使用的驱动自动生成的。如果该头文件存在，HAVE_CONFIG_H 编译器变量将被设置。此变量应测试，如果设置，该文件的config.h应该被包含在编译单元内。
   </p>
  </div>
  <div class="sect3" id="internals2.pdo.preparation.std-includes.php">
   <h4 class="title">PHP 头文件</h4>
   <p class="para">
    以下标准的公共的 PHP 头文件应包括在每个源模块中：
   </p>
   <ol type="1">
    <li class="listitem">
     <p class="para">php.h</p>
    </li>
    <li class="listitem">
     <p class="para">php_ini.h</p>
    </li>
    <li class="listitem">
     <p class="para">ext/standard/info.h</p>
    </li>
   </ol>
  </div>
  <div class="sect3" id="internals2.pdo.preparation.std-includes.pdo">
   <h4 class="title">PDO 接口头文件</h4>
   <p class="para">
    以下标准的公共的 PDO 头文件也应该包括在每个源模块中： 
   </p>
   <dl>

    
     <dt>
pdo/php_pdo.h</dt>

     <dd>

      <p class="para">
       该头文件包含了主驱动中初始值和关闭功能的定心及PDO全局变量的定义。
      </p>
     </dd>

    
    
     <dt>
pdo/php_pdo_driver.h</dt>

     <dd>

      <p class="para">
      该头文件包含了用来编写PDO驱动程序的类型和API。它还包含了调用返回到PDO层的方法签名和注册/注销PDO驱动程序。最重要的是，此头文件包含 PDO 的数据库句柄和语句的类型定义。驱动程序处理的两种主要结构 pdo_dbh_t 和 pdo_stmt_t，更详细的描述请查阅附录 A 和 B。
      </p>
     </dd>

    
   </dl>

  </div>
  <div class="sect3" id="internals2.pdo.preparation.std-headers.driver-spec">
   <h4 class="title">驱动程序特定的头文件</h4>
   <p class="para">
    典型的PDO的驱动程序有两个特定于数据库实现头文件。这并不排除使用上更多的取决于实现。按照惯例，下面列举了这两个头文件:
   </p>
   <dl>

    
     <dt>
php_pdo_SKEL.h</dt>

     <dd>

      <p class="para">
       这实际上是一个功能与内容和前面定义的专门为您的数据库定制的pdo/php_pdo.h完全相同的头文件。如果你的驱动程序需要使用全局变量，那么他们应使用ZEND_BEGIN_MODULE_GLOBALS 和 ZEND_END_MODULE_GLOBALS宏来定义。
       然后用宏来访问这些变量。这些宏通常被命名为PDO_SKEL_G(v)，其中v表示被访问的全局变量。更多信息，请查阅Zend programmer文档。
      </p>
     </dd>

    
    
     <dt>
php_pdo_SKEL_int.h</dt>

     <dd>

      <p class="para">
       该头文件通常包括特定于驱动程序实现的类型定义和函数申明。此外，它还包含pdo_SKEL_handle 和 pdo_SKEL_stmt结构中DB的具体定义。这些都是被driver_data所引用的句柄和语句结构成员的私有数据结构。
      </p>
     </dd>

    
   </dl>

  </div>
  <div class="sect3" id="internals2.pdo.preparation.std-headers.optional">
   <h4 class="title">可选头文件</h4>
   <p class="para">
    根据实际情况，一个特定的驱动程序可能需要包括下面头文件:
   </p>
   <div class="example-contents">
<div class="ccode"><pre class="ccode">#include &lt;zend_exceptions.h&gt;</pre>
</div>
   </div>

  </div>
 </div>
</div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="internals2.pdo.prerequisites.html">前提条件</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="internals2.pdo.implementing.html">Fleshing out your skeleton</a></div>
 <div class="up"><a href="internals2.pdo.html">PDO 驱动</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
